function tfm_btn4(vout)
	global data1 vc width1 depth1 depth2 widthjingpian ff1 image1TFM jianju
	f = ff1 * 1e6;
	t = 1 / f;
	[ha, le] = size(data1);
	n = sqrt(ha * 2);
	% 计算晶片位置（向量化）
	jingpian = (width1/2 - widthjingpian*(n-1)/2) + (0:n-1)' * widthjingpian;
	% 初始化网格
	n1 = width1 / jianju + 1;
	n2 = (depth2 - depth1) / jianju + 1;
	depth11 = depth1;
	data11 = data1;
	num = ha;
	% 加载速度模型
	% vp = load('vout_test.mat');
	vp11 = double(vout);
	vp11(end+1, :) = 3000; % 扩展一行
	vp1 = vp11(1, :); % 取第一行
	% 预分配图像矩阵
	image1 = zeros(n2, n1);
	% 创建网格坐标
	px_grid = (0:n1-1) * jianju;
	py_grid = depth11 + (0:n2-1) * jianju;
	[PX, PY] = meshgrid(px_grid, py_grid);
	% 预计算所有角度和距离
	parfor_progress(num);
	parfor ii = 1:ha
		originaldata = data11(ii, :);
		Ascan = originaldata(1, 3:le); % A扫信号
		jili = originaldata(1, 1); % 激励阵元
		jieshou = originaldata(1, 2); % 接收阵元
		% 计算所有像素点相对于当前晶片对的角度和距离（向量化）
		theta1 = atand(PY ./ abs(PX - jingpian(jili, 1)));
		theta2 = atand(PY ./ abs(PX - jingpian(jieshou, 1)));
		theta1 = round(theta1);
		theta2 = round(theta2);
		% 使用索引获取速度值（注意边界处理）
		theta1 = max(min(theta1, size(vp1, 2)), 1);
		theta2 = max(min(theta2, size(vp1, 2)), 1);
		v1 = vp1(theta1) * 1000;
		v2 = vp1(theta2) * 1000;
		% 计算距离
		juli1 = sqrt((PX - jingpian(jili, 1)).^2 + PY.^2);
		juli2 = sqrt((PX - jingpian(jieshou, 1)).^2 + PY.^2);
		% 计算传播时间
		tt1 = juli1 ./ v1;
		tt2 = juli2 ./ v2;
		t1 = tt1 + tt2;
		% 计算采样点索引
		nn = t1 / t;
		nn1 = floor(nn);
		nn2 = ceil(nn);
		% 边界检查并插值
		valid_idx = (nn2 <= (le-2)) & (nn1 >= 1);
		fuzhi = zeros(size(PX));
		fuzhi(valid_idx) = (Ascan(nn1(valid_idx)) + Ascan(nn2(valid_idx))) / 2;
		% 累加到图像
		image1 = image1 + fuzhi;
		parfor_progress;
	end
	parfor_progress(0);
end